package com.amado.course40Reflect;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class S01ClassTest {
	public static void main(String[] args) throws ClassNotFoundException {
		//返回与带有给定字符串名的类或接口相关联的 Class 对象
		System.out.println(Class.forName("com.amado.course40Reflect.Goods").getName());
		System.out.println(Class.forName("com.amado.course40Reflect.Goods").getConstructors().length);
		//Goods.class  返回的是java.lang.Class对象
		System.out.println(Goods.class.getName());
		//返回 Method 对象的一个数组，这些对象反映此 Class 对象表示的类或接口声明的所有方法，包括公共、保护、默认（包）访问和私有方法，但不包括继承的方法
		for(Method method:Goods.class.getDeclaredMethods()){
			System.out.println(method.getName());
		}
		
		try {
			Method method = Goods.class.getMethod("getGoodsCode");
			System.out.println("---"+method.getName());
			
			Goods goodsOne = new Goods("one", 1);
			Goods goodsTwo = new Goods("two", 1);
			//得到方法的返回值
			Class returnType = method.getReturnType();
			System.out.println("返回类型"+returnType);
			
			//调用一个方法,相当于goodsOne.getGoodsCode();
			System.out.println(method.invoke(goodsOne));
			//调用一个方法,相当于goodsTwo.getGoodsCode();
			System.out.println(method.invoke(goodsTwo));
		} catch (NoSuchMethodException | SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
